home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / RTLWIN16.PAK / STORAGE.H < prev    next >
C/C++ Source or Header  |  1997-05-06  |  13KB  |  457 lines

  1. /*****************************************************************************\
  2. *                                                                             *
  3. * storage.h -   Definitions for the strutured storage system
  4. *                                                                             *
  5. *               OLE Version 2.0                                               *
  6. *                                                                             *
  7. \*****************************************************************************/
  8.  
  9. /* $Copyright: 1994$ */
  10.  
  11.  
  12. #if !defined( _STORAGE_H_ )
  13. #define _STORAGE_H_
  14. #define __STORAGE_H
  15.  
  16. #include <compobj.h>
  17.  
  18. /****** Storage Error Codes *************************************************/
  19.  
  20. /* DOS-based error codes */
  21. #define STG_E_INVALIDFUNCTION \
  22.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x01)
  23.  
  24. #define STG_E_FILENOTFOUND \
  25.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x02)
  26.  
  27. #define STG_E_PATHNOTFOUND \
  28.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x03)
  29.  
  30. #define STG_E_TOOMANYOPENFILES \
  31.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x04)
  32.  
  33. #define STG_E_ACCESSDENIED \
  34.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x05)
  35.  
  36. #define STG_E_INVALIDHANDLE \
  37.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x06)
  38.  
  39. #define STG_E_INSUFFICIENTMEMORY \
  40.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x08)
  41.  
  42. #define STG_E_INVALIDPOINTER \
  43.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x09)
  44.  
  45. #define STG_E_NOMOREFILES \
  46.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x12)
  47.  
  48. #define STG_E_DISKISWRITEPROTECTED \
  49.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x13)
  50.  
  51. #define STG_E_SEEKERROR \
  52.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x19)
  53.  
  54. #define STG_E_WRITEFAULT \
  55.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x1d)
  56.  
  57. #define STG_E_READFAULT \
  58.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x1e)
  59.  
  60. #define STG_E_SHAREVIOLATION \
  61.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x20)
  62.  
  63. #define STG_E_LOCKVIOLATION \
  64.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x21)
  65.  
  66. #define STG_E_FILEALREADYEXISTS \
  67.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x50)
  68.  
  69. #define STG_E_INVALIDPARAMETER \
  70.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x57)
  71.  
  72. #define STG_E_MEDIUMFULL \
  73.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x70)
  74.  
  75. #define STG_E_ABNORMALAPIEXIT \
  76.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfa)
  77.  
  78. #define STG_E_INVALIDHEADER \
  79.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfb)
  80.  
  81. #define STG_E_INVALIDNAME \
  82.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfc)
  83.  
  84. #define STG_E_UNKNOWN \
  85.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfd)
  86.  
  87. #define STG_E_UNIMPLEMENTEDFUNCTION\
  88.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfe)
  89.  
  90. #define STG_E_INVALIDFLAG \
  91.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xff)
  92.  
  93. /* Standard storage error codes */
  94. #define STG_E_INUSE \
  95.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x100)
  96.  
  97. #define STG_E_NOTCURRENT \
  98.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x101)
  99.  
  100. #define STG_E_REVERTED \
  101.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x102)
  102.  
  103. #define STG_E_CANTSAVE \
  104.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x103)
  105.  
  106. #define STG_E_OLDFORMAT \
  107.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x104)
  108.     
  109. #define STG_E_OLDDLL \
  110.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x105)
  111.  
  112. #define STG_E_SHAREREQUIRED \
  113.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x106)
  114.  
  115. #define STG_E_NOTFILEBASEDSTORAGE \
  116.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x107)
  117.  
  118. #define STG_E_EXTANTMARSHALLINGS \
  119.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x108)
  120.  
  121. /* Information returns */
  122. #define STG_S_CONVERTED \
  123.     MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_STORAGE, 0x200)
  124.  
  125. /****** Storage types *******************************************************/
  126.  
  127. #if defined(_M_I286)
  128. typedef char TCHAR;
  129. #ifndef HUGEP
  130. #define HUGEP _huge
  131. #endif
  132. #else
  133. typedef char TCHAR;
  134. #ifndef HUGEP
  135. #define HUGEP
  136. #endif
  137. #endif
  138.  
  139. #define CWCSTORAGENAME 32
  140.  
  141. /* Storage instantiation modes */
  142. #define STGM_DIRECT             0x00000000L
  143. #define STGM_TRANSACTED         0x00010000L
  144.  
  145. #define STGM_READ               0x00000000L
  146. #define STGM_WRITE              0x00000001L
  147. #define STGM_READWRITE          0x00000002L
  148.  
  149. #define STGM_SHARE_DENY_NONE    0x00000040L
  150. #define STGM_SHARE_DENY_READ    0x00000030L
  151. #define STGM_SHARE_DENY_WRITE   0x00000020L
  152. #define STGM_SHARE_EXCLUSIVE    0x00000010L
  153.  
  154. #define STGM_PRIORITY           0x00040000L
  155. #define STGM_DELETEONRELEASE    0x04000000L
  156.  
  157. #define STGM_CREATE             0x00001000L
  158. #define STGM_CONVERT            0x00020000L
  159. #define STGM_FAILIFTHERE        0x00000000L
  160.  
  161. /* Storage commit types */
  162. typedef enum tagSTGC
  163. {
  164.     STGC_DEFAULT = 0,
  165.     STGC_OVERWRITE  = 1,
  166.     STGC_ONLYIFCURRENT  = 2,
  167.     STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4
  168. } STGC;
  169.  
  170. /* Stream name block definitions */
  171. typedef char FAR * FAR *SNB;
  172.  
  173.  
  174. #ifndef _WINDOWS_
  175. #ifndef _FILETIME_
  176. #define _FILETIME_
  177. typedef struct FARSTRUCT tagFILETIME
  178. {
  179.     DWORD dwLowDateTime;
  180.     DWORD dwHighDateTime;
  181. } FILETIME;
  182. #endif
  183. #endif
  184.  
  185.  
  186. /* Storage stat buffer */
  187.  
  188. typedef struct FARSTRUCT tagSTATSTG
  189. {
  190.     char FAR* pwcsName;
  191.     DWORD type;
  192.     ULARGE_INTEGER cbSize;
  193.     FILETIME mtime;
  194.     FILETIME ctime;
  195.     FILETIME atime;
  196.     DWORD grfMode;
  197.     DWORD grfLocksSupported;
  198.     CLSID clsid;
  199.     DWORD grfStateBits;
  200.     DWORD reserved;
  201. } STATSTG;
  202.  
  203.  
  204. /* Storage element types */
  205. typedef enum tagSTGTY
  206. {
  207.     STGTY_STORAGE   = 1,
  208.     STGTY_STREAM    = 2,
  209.     STGTY_LOCKBYTES = 3,
  210.     STGTY_PROPERTY  = 4
  211. } STGTY;
  212.  
  213. typedef enum tagSTREAM_SEEK
  214. {
  215.     STREAM_SEEK_SET = 0,
  216.     STREAM_SEEK_CUR = 1,
  217.     STREAM_SEEK_END = 2
  218. } STREAM_SEEK;
  219.  
  220. typedef enum tagLOCKTYPE
  221. {
  222.     LOCK_WRITE      = 1,
  223.     LOCK_EXCLUSIVE  = 2,
  224.     LOCK_ONLYONCE   = 4
  225. } LOCKTYPE;
  226.  
  227. typedef enum tagSTGMOVE
  228. {
  229.     STGMOVE_MOVE    = 0,
  230.     STGMOVE_COPY    = 1
  231. } STGMOVE;
  232.  
  233. typedef enum tagSTATFLAG
  234. {
  235.     STATFLAG_DEFAULT = 0,
  236.     STATFLAG_NONAME = 1
  237. } STATFLAG;
  238.  
  239.  
  240. /****** Storage Enumerators *************************************************/
  241.  
  242. #undef  INTERFACE
  243. #define INTERFACE   IEnumSTATSTG
  244.  
  245. DECLARE_INTERFACE_(IEnumSTATSTG, IUnknown)
  246. {
  247.     // *** IUnknown methods ***
  248.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
  249.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  250.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  251.  
  252.     // *** IENUMSTATSTG methods ***
  253.     STDMETHOD(Next) (THIS_ ULONG celt, STATSTG FAR * rgelt, ULONG FAR *pceltFetched) PURE;
  254.     STDMETHOD(Skip) (THIS_ ULONG celt) PURE;
  255.     STDMETHOD(Reset) (THIS) PURE;
  256.     STDMETHOD(Clone) (THIS_ IEnumSTATSTG FAR *FAR *ppenm) PURE;
  257. };
  258.  
  259. typedef IEnumSTATSTG FAR* LPENUMSTATSTG;
  260.  
  261.  
  262.  
  263. /****** ILockBytes Interface ************************************************/
  264.  
  265. #undef  INTERFACE
  266. #define INTERFACE   ILockBytes
  267.  
  268. DECLARE_INTERFACE_(ILockBytes, IUnknown)
  269. {
  270.     // *** IUnknown methods ***
  271.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
  272.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  273.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  274.  
  275.     // *** ILockBytes methods ***
  276.     STDMETHOD(ReadAt) (THIS_ ULARGE_INTEGER ulOffset,
  277.          VOID HUGEP *pv,
  278.          ULONG cb,
  279.          ULONG FAR *pcbRead) PURE;
  280.     STDMETHOD(WriteAt) (THIS_ ULARGE_INTEGER ulOffset,
  281.           VOID const HUGEP *pv,
  282.           ULONG cb,
  283.           ULONG FAR *pcbWritten) PURE;
  284.     STDMETHOD(Flush) (THIS) PURE;
  285.     STDMETHOD(SetSize) (THIS_ ULARGE_INTEGER cb) PURE;
  286.     STDMETHOD(LockRegion) (THIS_ ULARGE_INTEGER libOffset,
  287.          ULARGE_INTEGER cb,
  288.          DWORD dwLockType) PURE;
  289.     STDMETHOD(UnlockRegion) (THIS_ ULARGE_INTEGER libOffset,
  290.            ULARGE_INTEGER cb,
  291.          DWORD dwLockType) PURE;
  292.     STDMETHOD(Stat) (THIS_ STATSTG FAR *pstatstg, DWORD grfStatFlag) PURE;
  293. };
  294.  
  295. typedef ILockBytes FAR* LPLOCKBYTES;
  296.  
  297.  
  298.  
  299. /****** IStream Interface ***************************************************/
  300.  
  301.  
  302. #undef  INTERFACE
  303. #define INTERFACE   IStream
  304.  
  305. DECLARE_INTERFACE_(IStream, IUnknown)
  306. {
  307.     // *** IUnknown methods ***
  308.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
  309.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  310.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  311.  
  312.     // *** IStream methods ***
  313.     STDMETHOD(Read) (THIS_ VOID HUGEP *pv,
  314.              ULONG cb, ULONG FAR *pcbRead) PURE;
  315.     STDMETHOD(Write) (THIS_ VOID const HUGEP *pv,
  316.         ULONG cb,
  317.         ULONG FAR *pcbWritten) PURE;
  318.     STDMETHOD(Seek) (THIS_ LARGE_INTEGER dlibMove,
  319.            DWORD dwOrigin,
  320.            ULARGE_INTEGER FAR *plibNewPosition) PURE;
  321.     STDMETHOD(SetSize) (THIS_ ULARGE_INTEGER libNewSize) PURE;
  322.     STDMETHOD(CopyTo) (THIS_ IStream FAR *pstm,
  323.          ULARGE_INTEGER cb,
  324.          ULARGE_INTEGER FAR *pcbRead,
  325.          ULARGE_INTEGER FAR *pcbWritten) PURE;
  326.     STDMETHOD(Commit) (THIS_ DWORD grfCommitFlags) PURE;
  327.     STDMETHOD(Revert) (THIS) PURE;
  328.     STDMETHOD(LockRegion) (THIS_ ULARGE_INTEGER libOffset,
  329.          ULARGE_INTEGER cb,
  330.          DWORD dwLockType) PURE;
  331.     STDMETHOD(UnlockRegion) (THIS_ ULARGE_INTEGER libOffset,
  332.          ULARGE_INTEGER cb,
  333.          DWORD dwLockType) PURE;
  334.     STDMETHOD(Stat) (THIS_ STATSTG FAR *pstatstg, DWORD grfStatFlag) PURE;
  335.     STDMETHOD(Clone)(THIS_ IStream FAR * FAR *ppstm) PURE;
  336. };
  337.  
  338. typedef IStream FAR* LPSTREAM;
  339.  
  340.  
  341.  
  342. /****** IStorage Interface **************************************************/
  343.  
  344. #undef  INTERFACE
  345. #define INTERFACE   IStorage
  346.  
  347. DECLARE_INTERFACE_(IStorage, IUnknown)
  348. {
  349.     // *** IUnknown methods ***
  350.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
  351.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  352.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  353.  
  354.     // *** IStorage methods ***
  355.     STDMETHOD(CreateStream) (THIS_ const char FAR* pwcsName,
  356.            DWORD grfMode,
  357.            DWORD reserved1,
  358.            DWORD reserved2,
  359.            IStream FAR *FAR *ppstm) PURE;
  360.     STDMETHOD(OpenStream) (THIS_ const char FAR* pwcsName,
  361.          void FAR *reserved1,
  362.          DWORD grfMode,
  363.          DWORD reserved2,
  364.          IStream FAR *FAR *ppstm) PURE;
  365.     STDMETHOD(CreateStorage) (THIS_ const char FAR* pwcsName,
  366.         DWORD grfMode,
  367.         DWORD reserved1,
  368.         DWORD reserved2,
  369.         IStorage FAR *FAR *ppstg) PURE;
  370.     STDMETHOD(OpenStorage) (THIS_ const char FAR* pwcsName,
  371.           IStorage FAR *pstgPriority,
  372.           DWORD grfMode,
  373.           SNB snbExclude,
  374.           DWORD reserved,
  375.           IStorage FAR *FAR *ppstg) PURE;
  376.     STDMETHOD(CopyTo) (THIS_ DWORD ciidExclude,
  377.                IID const FAR *rgiidExclude,
  378.                SNB snbExclude,
  379.                IStorage FAR *pstgDest) PURE;
  380.     STDMETHOD(MoveElementTo) (THIS_ char const FAR* lpszName,
  381.                   IStorage FAR *pstgDest,
  382.                   char const FAR* lpszNewName,
  383.                   DWORD grfFlags) PURE;
  384.     STDMETHOD(Commit) (THIS_ DWORD grfCommitFlags) PURE;
  385.     STDMETHOD(Revert) (THIS) PURE;
  386.     STDMETHOD(EnumElements) (THIS_ DWORD reserved1,
  387.          void FAR *reserved2,
  388.          DWORD reserved3,
  389.          IEnumSTATSTG FAR *FAR *ppenm) PURE;
  390.     STDMETHOD(DestroyElement) (THIS_ const char FAR* pwcsName) PURE;
  391.     STDMETHOD(RenameElement) (THIS_ const char FAR* pwcsOldName,
  392.         const char FAR* pwcsNewName) PURE;
  393.     STDMETHOD(SetElementTimes) (THIS_ const char FAR *lpszName,
  394.                 FILETIME const FAR *pctime,
  395.                 FILETIME const FAR *patime,
  396.                 FILETIME const FAR *pmtime) PURE;
  397.     STDMETHOD(SetClass) (THIS_ REFCLSID clsid) PURE;
  398.     STDMETHOD(SetStateBits) (THIS_ DWORD grfStateBits, DWORD grfMask) PURE;
  399.     STDMETHOD(Stat) (THIS_ STATSTG FAR *pstatstg, DWORD grfStatFlag) PURE;
  400. };
  401.  
  402. typedef IStorage FAR* LPSTORAGE;
  403.  
  404.  
  405.  
  406. /****** IRootStorage Interface **********************************************/
  407.  
  408. #undef  INTERFACE
  409. #define INTERFACE   IRootStorage
  410.  
  411. DECLARE_INTERFACE_(IRootStorage, IUnknown)
  412. {
  413.     // *** IUnknown methods ***
  414.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
  415.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  416.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  417.  
  418.     // *** IRootStorage methods ***
  419.     STDMETHOD(SwitchToFile) (THIS_ LPSTR lpstrFile) PURE;
  420. };
  421.  
  422. typedef IRootStorage FAR* LPROOTSTORAGE;
  423.  
  424.  
  425.  
  426. /****** Storage API Prototypes ********************************************/
  427.  
  428. STDAPI StgCreateDocfile(const char FAR* pwcsName,
  429.         DWORD grfMode,
  430.         DWORD reserved,
  431.         IStorage FAR * FAR *ppstgOpen);
  432. STDAPI StgCreateDocfileOnILockBytes(ILockBytes FAR *plkbyt,
  433.             DWORD grfMode,
  434.             DWORD reserved,
  435.             IStorage FAR * FAR *ppstgOpen);
  436. STDAPI StgOpenStorage(const char FAR* pwcsName,
  437.           IStorage FAR *pstgPriority,
  438.           DWORD grfMode,
  439.           SNB snbExclude,
  440.           DWORD reserved,
  441.           IStorage FAR * FAR *ppstgOpen);
  442. STDAPI StgOpenStorageOnILockBytes(ILockBytes FAR *plkbyt,
  443.           IStorage FAR *pstgPriority,
  444.           DWORD grfMode,
  445.           SNB snbExclude,
  446.           DWORD reserved,
  447.           IStorage FAR * FAR *ppstgOpen);
  448. STDAPI StgIsStorageFile(const char FAR* pwcsName);
  449. STDAPI StgIsStorageILockBytes(ILockBytes FAR* plkbyt);
  450.  
  451. STDAPI StgSetTimes(char const FAR* lpszName,
  452.           FILETIME const FAR* pctime,
  453.           FILETIME const FAR* patime,
  454.           FILETIME const FAR* pmtime);
  455.  
  456. #endif // _STORAGE_H_
  457.